#include <dretve.h>
#include <ispis.h>
#include <vrijeme.h>

static int mon, red;

static void tdretva(void *x)
{
	int i, id = id_dretve();
	vrijeme_t koliko;
	koliko.sekunde = 3;
	koliko.nsekunde = 0;
	
	ispisi("Dretva %d pocetak\n", id);

	zakljucaj(mon);
	spavaj(koliko);

#define NN 2
	for (i = 0; i < NN; i++) {
		ispisi("Dretva %d, prije prolaza = %d\n", id, i + 1);
		if (cekaj_u_redu_t(red, mon, &koliko)){// == -2) {
			ispisi("Dretva %d, prekida cekanje!\n", id);
			spavaj(koliko);
		}
		ispisi("Dretva %d, poslije prolaza = %d\n", id, i + 1);
	}
#undef NN

	otkljucaj(mon);

	ispisi("Dretva %d zavrsava\n", id);
}

void test_sinkro2()
{
	ispisi("\n[%s:%s:%d]\n", __FILE__, __FUNCTION__, __LINE__);

	int dr1, dr2;
	vrijeme_t koliko;
	koliko.sekunde = 1;
	koliko.nsekunde = 0;
	
	mon = dohvati_sinkro(MONITOR, 0, 0, 0);
	if (mon == -1) {
		ispisi("nema monitora!\n");
		return;
	}

	red = dohvati_sinkro(REDUVJETA, 0, 0, 0);
	if (red == -1) {
		ispisi("nema reda uvjeta!\n");
		return;
	}
	
	dr1 = stvori_dretvu(tdretva, NULL);
	dr2 = stvori_dretvu(tdretva, NULL);
	if (dr1 == -1 || dr2 == -1)
		return;
	
	cekaj_kraj_dretve(dr1);
	cekaj_kraj_dretve(dr2);
	
	obrisi_sinkro(red);
	obrisi_sinkro(mon);
}
